package com.yami.shop.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yami.shop.bean.model.HotTopics;
import com.yami.shop.bean.model.Post;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 查询包含参与信息的热门话题列表（支持模糊搜索和分页）
 *
 * 该方法通过联合查询获取热门话题及其关联的参与信息，支持根据标题模糊搜索，
 * 并使用LIMIT/OFFSET实现分页逻辑。查询结果包含来自tz_hot_topics表的所有字段
 * 以及关联的tz_topic_participations表中的post_id字段。
 *
 * @author DELL
 * @return 包含HotTopics对象及其关联post_id的列表，每个HotTopics对象将包含：
 *         - 话题基础信息（来自tz_hot_topics表）
 *         - 关联的post_id字段（来自tz_topic_participations表）
 */
public interface HotTopicMapper extends BaseMapper<HotTopics> {




    /**
     * 重写 selectList 方法，仅查询实际存在的字段
     * @param queryWrapper
     * @return
     */
    @Select("SELECT topic_id, title, description, created_at, updated_at FROM tz_hot_topics")
    @Override
    List<HotTopics> selectList(@Param(Constants.WRAPPER) Wrapper<HotTopics> queryWrapper);


    /* 联合查询热门话题及其参与信息：
     * 1. 通过LEFT JOIN关联话题参与表
     * 2. 使用CONCAT实现前后模糊匹配
     * 3. 通过LIMIT/OFFSET实现分页逻辑
     **/

    // 原联合查询方法保持不变
   @Select("SELECT ht.topic_id, ht.title,tp.post_id " + // 明确列出所需字段
        "FROM tz_hot_topics ht " +
        "LEFT JOIN tz_topic_participations tp ON ht.topic_id = tp.topic_id " +
        "WHERE ht.title LIKE CONCAT('%', #{title}, '%') LIMIT #{limit} OFFSET #{offset}")

    List<HotTopics> selectTopicsWithParticipation(@Param("title") String title, @Param("limit") int limit, @Param("offset") int offset);

    /**
     * 根据帖子ID查询热门话题
     * @param postId
     * @param title
     * @param limit
     * @param offset
     * @return
     */
    @Select({
            "<script>",
            "SELECT ht.* FROM tz_hot_topics ht",
            "WHERE ht.topic_id IN (",
            "  SELECT topic_id FROM tz_topic_participations",
            "  WHERE post_id = #{postId}",
            ")",
            "<if test='title != null'>",
            "  AND ht.title LIKE CONCAT('%', #{title}, '%')",
            "</if>",
            "LIMIT #{limit} OFFSET #{offset}",
            "</script>"
    })
    List<HotTopics> selectTopicsByPostId(
            @Param("postId") Long postId,
            @Param("title") String title,
            @Param("limit") int limit,
            @Param("offset") int offset
    );
}


